﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using TFile.CAD.Repositorios;
using TFile.CCA;
using TFile.CES.Entidades;
using TFile.CUB;
using TFile.ISA;
using System.Data;

namespace TFile.CLN
{
    public class DocumentoServico
    {
        public List<string> Mensagens { private set; get; }

        public DocumentoServico()
        {
            Mensagens = new List<string>();
        }

        public DataSet GetData(String rede)
        {
            DataSet xmldataset = new DataSet();
            Mensagens.Clear();
            var canal = new ClienteArquivo();            
            IXMLDataService xmldata = canal.OpenChannel2(rede);
            byte[] dtfile = xmldata.GetData();
            FileStream fs = new FileStream(@"Documentos.xml", FileMode.Create, FileAccess.Write);
            fs.Write(dtfile, 0, dtfile.Length);
            fs.Close();
            canal.CloseChannel();
            FileStream fsReadXml = new FileStream(@"Documentos.xml", System.IO.FileMode.Open);
            try
            {
                xmldataset.ReadXml(fsReadXml);
            }
            catch (Exception ex)
            {
                Mensagens.Add(ex.ToString());
            }
            finally
            {
                fsReadXml.Close();
            }
            return xmldataset;
        }
        
        public void Copia(String rede1, String rede2, String caminhoo, String arquivo, String extensao, String descricao)
        {
            Mensagens.Clear();
            var canal = new ClienteArquivo();
            IDocumentLibraryService client = canal.OpenChannel1(rede1);
            IXMLDataService xmldata = canal.OpenChannel2(rede2);

            string arqo = arquivo;
            string arqd = "DOC_" + ConverteData.DataNumerica() + extensao;
            string caminhod = ConfigurationManager.AppSettings["Documentos"];

            if (string.IsNullOrEmpty(caminhoo) || string.IsNullOrEmpty(arquivo) || string.IsNullOrEmpty(extensao))
            {
                Mensagens.Add("Selecione um arquivo.");
            }

            string origem = System.IO.Path.Combine(@caminhoo, arqo);

            byte[] buffer = null;

            try
            {
                using (FileStream fs = new FileStream(origem, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, (int)fs.Length);
                }
                if (buffer != null)
                {
                    client.UploadDocument(arqd, buffer);
                }
                
            }
            catch (Exception e)
            {
                Mensagens.Add(e.Message);
            }

            xmldata.InsertData(descricao, arqd);
            Mensagens.Add("");

            canal.CloseChannel();
        }

        public void ExcluiDocumento(String rede1, String rede2, String docid, String arquivo)
        {
            bool delete = false;
            var canal = new ClienteArquivo();
            IDocumentLibraryService client = canal.OpenChannel1(rede1);
            IXMLDataService xmldata = canal.OpenChannel2(rede2);
            Mensagens.Clear();
            try
            {
                client.DeleteDocument(arquivo);
                delete = true;               
            }
            catch (Exception e)
            {
                Mensagens.Add(e.Message);
                delete = false;
            }

            if (delete)
            {
                xmldata.DeleteData(docid);
                Mensagens.Add("");
            }

            canal.CloseChannel();
        }

        public int ExecutarArquivo(String rede, String _arquivo)
        {
            var canal = new ClienteArquivo();
            IDocumentLibraryService client = canal.OpenChannel1(rede);
            string arquivo = System.IO.Path.Combine(Path.GetTempPath(), _arquivo);
            byte[] data = client.DownloadDocument(arquivo);
            FileStream fs = new FileStream(arquivo, FileMode.Create, FileAccess.Write);
            fs.Write(data, 0, data.Length);
            fs.Close();
            canal.CloseChannel();
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = arquivo;
            Process.Start(startInfo);
            return 0;
        }
    }
}
